package zkclient

import (
	"EasyData/global"
	log "code.google.com/p/log4go"
	"fmt"
	"strings"
	"EasyData/util"
	"EasyData/task"
)
/**
	当收到zk通知时，回调用方法触发调用该方法，将更新内容映射到全局配置上
 */
func scanConfig(path string,value string,tasker *global.Task){
	fmt.Println(path,value)

	log.Info(" taskName [%s] zkNode Data changed path[%s] value[%s]", tasker.TaskName,path,value)
	if ""==value {
		errStr := fmt.Sprintf("zkNode path[%s] value is null ",value)
		log.Error(errStr)
	}
	//更新的值是限速
	if strings.Contains(path,speed) {
		tasker.Speed=util.ToInt64(value,tasker.Speed)
	}
	//更新的值是table名
	if strings.Contains(path,table) {
		tasker.Table=value
	}
	//更新的值是主键
	if strings.Contains(path,key) {
		tasker.Key =value
	}
	//更新的值是Condition
	if strings.Contains(path,condition){
		tasker.Condition=value
	}
	//更新的值是parameter
	if strings.Contains(path,parameter){
		tasker.Parameter=util.ToSTringSlice(value)
	}
	//更新的值是Limit
	if strings.Contains(path,limit){
		tasker.Limit = util.GetInt(value,tasker.Limit)
	}
	//更新的值是SyncColumn
	if strings.Contains(path,syncColumn){
		tasker.SyncColumn =value
	}
	//更新的值是SyncValue
	if strings.Contains(path,syncValue){
		tasker.SyncValue =value
	}
	//如果要更新的值是一个手动触发定时任务的开发，则手动触发一下定时任务
	if strings.Contains(path,open){
		if tasker.Cron != "" {
			go task.QueueManager.ExcuseCronTask(tasker.TaskName)
		}else{
			go task.QueueManager.ExcuseWaitTask(tasker.TaskName)
		}
	}
	//如果要更新的值是Stop,则根据结果进行操作，如果是true，则暂停服务，如果是false，则取消服务暂停
	if strings.Contains(path,stop) {
		stop := util.ToBool(value,false)

		if stop {
			go task.QueueManager.StopTask(tasker.TaskName)
		}else{
			go task.QueueManager.StartTask(tasker.TaskName)
		}
	}
}
